package com.yht.framework.common.response;

import com.yht.framework.common.exception.BaseExceptionInterface;
import com.yht.framework.common.exception.BizException;
import lombok.Data;

import java.io.Serializable;

@Data
public class Response<T> implements Serializable {

    //是否成功
    private boolean success = true;

    //响应消息
    private String message;

    //响应码
    private String errorCode;

    //响应数据
    private T data;

    //==============================================成功响应=========================================================
    public static <T> Response<T> success() {
        return new Response<>();
    }

    public static <T> Response<T> success(T data) {
        Response<T> response = new Response<>();
        response.setData(data);
        return response;
    }

//==============================================失败响应=========================================================

    public static <T> Response<T> fail() {
        Response<T> response = new Response<>();
        response.setSuccess(false);

        return response;
    }


    public static <T> Response<T> fail(String errorMessage) {
        Response<T> response = new Response<>();
        response.setSuccess(false);
        response.setMessage(errorMessage);

        return response;
    }

    public static <T> Response<T> fail(String errorCode, String errorMessage) {
        Response<T> response = new Response<>();
        response.setSuccess(false);
        response.setErrorCode(errorCode);
        response.setMessage(errorMessage);

        return response;
    }

    public static <T> Response<T> fail(BizException exception) {
        Response<T> response = new Response<>();
        response.setSuccess(false);
        response.setMessage(exception.getErrorMessage());
        response.setErrorCode(exception.getErrorCode());

        return response;
    }

    public static <T> Response<T> fail(BaseExceptionInterface baseExceptionInterface) {
        Response<T> response = new Response<>();
        response.setSuccess(false);
        response.setMessage(baseExceptionInterface.getErrorMessage());
        response.setErrorCode(baseExceptionInterface.getErrorCode());

        return response;
    }
}
